package leetcodev1.字符串;

import leetcodev1.链表.Solution;

import java.util.*;

public class LeetCode179 {

    public static void main(String[] args) {
        LeetCode179 leetCode179 = new LeetCode179();
        leetCode179.largestNumber(new int[]{10, 2});
    }

    //1.暴力解 排列组合后转换成int比大小
    //2.发现规律 根据一定的规律进行排序
    //9>10，利用string进行排序
    //53>530 53>531 53>532 53<534
    //3432>34323
    public String largestNumber(int[] nums) {
        StringBuilder ret = new StringBuilder();
        List<String> list = new ArrayList<>();
        for (int num : nums) {
            list.add(String.valueOf(num));
        }
        list.sort((o1, o2) -> {
            long tmpRet = Long.parseLong(o2 + o1) - Long.parseLong(o1 + o2);
            return tmpRet == 0 ? 0 : tmpRet > 0 ? 1 : -1;

//            if (o1.equals(o2)) {
//                return 0;
//            }
//            int length1 = o1.length(), length2 = o2.length(), index = 0;
//            while (index < length1 && index < length2) {
//                if (o1.charAt(index) < o2.charAt(index)) {
//                    return 1;
//                } else if (o1.charAt(index) > o2.charAt(index)) {
//                    return -1;
//                }
//                index++;
//            }
//
//            if (length1 > length2) {
//                return o1.charAt(index - 1) - o1.charAt(index);
//            } else {
//                return o2.charAt(index) - o2.charAt(index - 1);
//            }

        });

        if (list.get(0).equals("0")) {
            return "0";
        }
        for (String s : list) {
            ret.append(s);
        }
        return ret.toString();
    }

    public String largestNumber1(int[] nums) {
        int n = nums.length;
        // 转换成包装类型，以便传入 Comparator 对象（此处为 lambda 表达式）
        Integer[] numsArr = new Integer[n];
        for (int i = 0; i < n; i++) {
            numsArr[i] = nums[i];
        }

        Arrays.sort(numsArr, (x, y) -> {
            long sx = 10, sy = 10;
            while (sx <= x) {
                sx *= 10;
            }
            while (sy <= y) {
                sy *= 10;
            }
            return (int) (-sy * x - y + sx * y + x);
        });

        if (numsArr[0] == 0) {
            return "0";
        }
        StringBuilder ret = new StringBuilder();
        for (int num : numsArr) {
            ret.append(num);
        }
        return ret.toString();
    }

}
